package com.psychologyCommunity.Community.util;

import org.apache.kafka.common.protocol.types.Field;

public class RedisKeyUtil {
    private static final String SPLIT=":";//所有的key在拼的时候 以:分割
    private static final String PREFIX_ENTITY_LIKE="like:entity";//帖子和评论的赞 保存的前缀
    private  static final String PREFIX_USER_LIKE="like:user"; //某个用户的赞
    private  static final String PREFIX_FOLLOWEE="followee";//被关注的
    private static final  String PREFIX_FOLLOWER="follower";//粉丝
    private static final  String PREFIX_KAPTCHA="kaptcha";//定义一个验证码的前缀
    private static final  String PREFIX_TICKET="ticket";//定义一个登录凭证的前缀
    private static final  String PREFIX_USER="user";//定义一个用户的前缀
    private static final String PREFIX_UV="uv";
    private static final String PREFIX_DAU="dau";
    private static final String PREFIX_POST="post";//存帖子的key 后面会用来统计帖子分数 放到缓存里 定时算分

    //生成某个实体的赞的实例
    //整体的格式 like:entity:entityType:entityId -->set(userId)
    public static String getEntityLikeKey(int entityType,int entityId){
        return PREFIX_ENTITY_LIKE+SPLIT+entityType+SPLIT+entityId;
    }
    //某个用户的赞
    //like:user:userId -->int
    public static String getUserLikeKey(int userId){
        return PREFIX_USER_LIKE+SPLIT+userId;
    }

    //某个用户关注的实体 (关注的 可能是用户、帖子 或题目)
    //followee:userId:entityType  -->这个key存的两个值是zset(entityId,now)存的是entityId和当前时间作为分数  用来排序
    public static String getFolloweeKey(int userId,int entityType){
        return PREFIX_FOLLOWEE+SPLIT+userId+SPLIT+entityType;
    }
    //某个实体拥有的粉丝
    //follower:entityType:entityId -->这个key存的两个值是 zset(userId,now)
    public static String getFollowerKey(int entityType,int entityId){
        return PREFIX_FOLLOWER+SPLIT+entityType+SPLIT+entityId;
    }

    //登录验证码 --不同的用户它的验证码是不同的，我们要识别出来这个验证码属于哪个用户，
    // 不能加userid 因为验证码是辅助用户登录的，在登录页面 看到验证码时，此时还没登陆，还不知道userId
    // 所以可以在用户访问登录页面的时候发一个凭证（随机生成的字符串）,存在cookie里，以这个凭证来临时标识这个用户，之后让字符串过期就行
    public static String getKaptchaKey(String owner){ //owner表示临时的 前缀
        return PREFIX_KAPTCHA+SPLIT+owner;
    }

    //得到 登录凭证的方法 --传的是ticket的字符串 --mysql中的login——ticket这个表一废弃了
    public static String getTicketKey(String ticket){
        return PREFIX_TICKET+SPLIT+ticket;
    }
    //用户
    public static String getUserKey(int userId){
        return PREFIX_USER+SPLIT+userId;
    }

    //单日的UV来记 ，
    public static String getUVKey(String date){
        return PREFIX_UV+SPLIT+date;
    }
    //区间的UV 的key ；如果要计算一周 一个月的可以用 bitmap的合并单日的UV来做 但是 它需要放到一个新的存储空间
    public static String getDuringUVKey(String startDate,String endDate){
        return PREFIX_UV+SPLIT+startDate+SPLIT+endDate;
    }
    //单日活跃用户
    public static String getDAUKey(String date){
        return PREFIX_DAU+SPLIT+date;
    }
    //区间活跃用户
    public static String getDAUKey(String startDate, String endDate){
        return PREFIX_DAU+SPLIT+startDate+SPLIT+endDate;
    }

    //因为我们用的redis，不用写数据访问层，上来直接写Service层就行，去调用redisTempleate
    public static String getPostScoreKey(){
        return PREFIX_POST+SPLIT+"score";
    }
}
